package models

/**
2023/6/16	22:19
定义的权限表
这个表意思是，所有的client都可以拥有这个表数据的权限

大意是，尽量最小化权限控制，能不给权限控制的url，就不给，或者给个APP的所有权限

范围格式
	XXX:XXX:XXX:ALL or READ or WRITE			*:大小写未规范
	第一层XXX：代表是系统内部还是外部，例如：SYS：表示系统或后台，APP：代表应用，外在访问，不能是ALL
	第二层XXX：代表某个应用，例如：OAUTH：代表授权系统，ARTICLE：博客系统，不能出现ALL，必须区分
	第三层XXX：代表某个模块，例如：USER：用户模块，CONTEXT：内容模块，也可以是ALL
	第四层XXX：代表READ只读，WRITE只写，ALL可读可写
例如：
					SYS:ARTICLE:USER:ALL		// 单独拥有用户所有权限
article系统		-->	SYS:ARTICLE:CONTEXT:ALL		// 单独拥有内容所有权限
					SYS:ARTICLE:ALL				// 拥有所有权限

#问题
1.同个账号多个系统授权问题：
	例如一个账号，同时，授权了1号系统所有权限的token，又授权了2号系统的用户权限token，则两个token不冲突，需要验证aud
2.怎么查表：
	通过tag查询，oauth2_registered_client表里的scopes字段，用tag标识，来获取Permission
3.外部应用：
	如果是本系统的新用户注册，默认分配，APP:ALL，意思是对该APP的所有外部权限，内部则没有权限
	如果是调用OAUTH系统，则只有小写的userinfo权限3
4.多个权限问题
	尽量保障一个授权token，一个权限
*/

type OAuth2Scope struct {
	Id         int    `json:"id,omitempty"`
	Name       string `json:"name,omitempty" binding:"required"`       // 例如：用户管理权限
	Tag        string `json:"tag,omitempty" binding:"required"`        // 用于访问的标签，例如：SYS:OAUTH:USER，标签则为oauth-user，申请时：scope=oauth-user
	Permission string `json:"permission,omitempty" binding:"required"` // 例如：SYS:OAUTH:USER:READ，或者：SYS:OAUTH:ALL：代表全部权限
	Remarks    string `json:"remarks,omitempty" binding:"required"`    // 备注
}

func (OAuth2Scope) TableName() string {
	return "oauth2_scope"
}
